<?php
/**
 * Контроллер элементов
 * 
 * База для всех элементов
 * @author Anton Zavidov
 * @package myLiveShop
 */

/**
 * Класс контроллера наследования всеми сушьностями
 *
 */
abstract class Element extends Controller{
	/**
	 * Текущий id
	 *
	 * @var mixed
	 */
	protected $id;
	
	protected $show_view;
	/**
	 * Констуктор
	 *
	 * @param string $className имя контроллера
	 */
	public function __construct($className=null){	
		parent::__construct($className?$className:__CLASS__);
	}
	/**
	 * Просмотр елементов
	 *
	 */
	public function show(){
		L($this->name.' Show');
		$this->show_view=__FUNCTION__;
		Core::clearLastRequest();
	}
	/**
	 * Просмотр елемента
	 *
	 */
	public function display($load=true){
		L($this->name.' Display');
		$this->findId($load);
		$this->show_view=__FUNCTION__;
	}
	/**
	 * Форма редактирования
	 *
	 */
	public function edit($load=true){
		L($this->name.' Edit');
		$this->findId($load);
		$this->show_view=__FUNCTION__;
	}
	/**
	 * Форма создания
	 *
	 */
	public function add(){
		L($this->name.' Add');
		$this->show_view=__FUNCTION__;
	}
	/**
	 * Создание
	 *
	 */
	public function save(){
		L($this->name.' Save');
		$this->show_view=__FUNCTION__;
	}
	/**
	 * Удаление
	 * @param Bool $load Искать ли ID
	 * @return Bool Удачно ли удаление
	 *
	 */
	public function delete($load=true, $deleteImage=false){
		L($this->name.' Delete');
		//удаляем елемент по id
		$this->findId($load);
		$this->show_view=__FUNCTION__;
		if($this->id){
			if($deleteImage) import('helper.image',true)->deleteImageFromModule($this->id, $this->name);
			return $this->model()->delete($this->id);
		}
	}
	protected function findId($load=true){
		if($load){
			if(is_bool($load)){
				if(!$id=Requestlocal::getInt('id')){
					if(!is_numeric($id=Vars::_(Router::CUSTOM))){
						new CoreExeption('Не могу найти id ',E_WARNING,__FILE__,__LINE__,array('load'=>$load));
					}
				}
			}else{
				$id=$load;
			}
			$this->id=$id;
		}
	}
	protected function build($view=false){
        if (Vars::_(Router::VIEW_TYPE) == 'json') return;
	    $this->view->show($this->name.'_'.($view?$view:$this->show_view));
	}
}